home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
021-030
/
amok29
/
disktohard
/
hardtodisk.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
3KB
|
81 lines
(**********************************************************************
:Program. HardToDisk.mod
:Contents. copies HD-file created by DiskToHard to a floppy disk
:Author. Nicolas Benezan [bne]
:Author. Norbert Klapczynski
:Copyright. Public Domain
:Language. Modula-2
:Translator. M2Amiga AMSoft V3.2
:Imports. ErrorReq1.3 (-> Amok#25:M2Make1.9/Modules)
:Imports. MemSystem1.4 (-> Amok#25:M2Make1.9/Modules)
:Imports. TrackDiskSupport2.1 (-> Amok#19:TrackDiskSupport_2.1)
:History. V1.0 Norbert, [bne] 15.Aug.1989
:History. V1.1 [bne] 1.Dez.1989 (+ verify, cosmetics)
**********************************************************************)
MODULE HardToDisk;
FROM Arts IMPORT TermProcedure;
FROM Arguments IMPORT GetArg;
FROM Dos IMPORT Close, FileHandlePtr, oldFile, Open, Read;
FROM ErrorReq IMPORT Assert;
FROM MemSystem IMPORT Deallocate, NoCareAllocMem;
FROM SYSTEM IMPORT ADDRESS, ADR;
FROM TrackDiskSupport IMPORT ChangeState, CloseDiskDevice, DeviceInfo,
DiskUnit, FormatTrack, GetDeviceInfo,
GetDiskChange, InhibitDrive, OpenDiskDevice,
ReadBlock;
VAR
Unit: DiskUnit;
File: FileHandlePtr;
Info: DeviceInfo;
BlocksPerTrack, Block, Cylinder, Head, Len: INTEGER;
Change: LONGINT;
Buffer, Buffer2: ADDRESS;
DiskName: ARRAY [0..30] OF CHAR;
PROCEDURE Cleanup;
BEGIN
IF File # NIL THEN
Close (File);
END;
IF InhibitDrive (Unit, FALSE) THEN END;
END Cleanup;
BEGIN
File:= NIL;
IF (OpenDiskDevice ("DF0", Unit) = 0) AND ChangeState (Unit) THEN
TermProcedure (Cleanup);
Assert (InhibitDrive (Unit, TRUE), ADR ("Drive nicht verfügbar"));
Change:= GetDiskChange (Unit);
GetDeviceInfo (Unit, Info);
WITH Info DO
NoCareAllocMem (Buffer, trackLen, TRUE);
NoCareAllocMem (Buffer2, trackLen, TRUE);
GetArg (1, DiskName, Len);
File:= Open (ADR (DiskName), oldFile);
IF File # NIL THEN
Block:= 0;
Cylinder:= 0;
BlocksPerTrack:= trackLen DIV blockLen;
REPEAT
FOR Head:= 0 TO 1 DO
Assert (Read (File, Buffer, trackLen) = trackLen,
ADR ("Lesefehler"));
Assert (FormatTrack (Unit, Cylinder, Head, Buffer, Change) = 0,
ADR ("Schreibfehler"));
Assert (ReadBlock(Unit, Block, BlocksPerTrack, Buffer2, Change)
= 0, ADR ("Überprüfungsfehler"));
INC (Block, BlocksPerTrack);
END;
INC (Cylinder);
UNTIL Block >= numBlocks;
END;
END;
END;
END HardToDisk.